package org.jeecg.modules.mes.service;

import java.util.List;
import java.util.Date;
import java.math.BigDecimal;
import org.jeecg.modules.mes.entity.MesEmployeePieceWage;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * @Description: 员工计件工资记录表
 * @Author: jeecg-boot
 * @Date: 2025-01-01
 * @Version: V1.0
 */
public interface IMesEmployeePieceWageService extends IService<MesEmployeePieceWage> {

    /**
     * 计算员工计件工资
     * @param taskId 任务ID
     * @param employeeId 员工ID
     * @param completedQuantity 完成数量
     * @return 工资记录
     */
    MesEmployeePieceWage calculatePieceWage(String taskId, String employeeId, Integer completedQuantity);

    /**
     * 计算员工计件工资（带质量和效率评分）
     * @param taskId 任务ID
     * @param employeeId 员工ID
     * @param completedQuantity 完成数量
     * @param qualityScore 质量评分
     * @param efficiencyScore 效率评分
     * @return 工资记录
     */
    MesEmployeePieceWage calculatePieceWageWithBonus(String taskId, String employeeId, 
                                                    Integer completedQuantity, 
                                                    BigDecimal qualityScore, 
                                                    BigDecimal efficiencyScore);

    /**
     * 获取员工工资统计
     * @param employeeId 员工ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 工资记录列表
     */
    List<MesEmployeePieceWage> getEmployeeWageStats(String employeeId, Date startDate, Date endDate);

    /**
     * 获取员工日工资统计
     * @param employeeId 员工ID
     * @param workDate 工作日期
     * @return 当日工资记录列表
     */
    List<MesEmployeePieceWage> getDailyWageByEmployee(String employeeId, Date workDate);

    /**
     * 获取任务相关的工资记录
     * @param taskId 任务ID
     * @return 工资记录列表
     */
    List<MesEmployeePieceWage> getWageRecordsByTask(String taskId);

    /**
     * 获取待结算的工资记录
     * @param employeeId 员工ID
     * @return 待结算工资记录列表
     */
    List<MesEmployeePieceWage> getPendingSettlementWages(String employeeId);

    /**
     * 批量结算工资
     * @param wageIds 工资记录ID列表
     * @return 是否成功
     */
    boolean batchSettleWages(List<String> wageIds);

    /**
     * 获取员工工资汇总统计
     * @param employeeId 员工ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 工资汇总信息
     */
    BigDecimal getTotalWageByEmployee(String employeeId, Date startDate, Date endDate);
}
